Bevezets a Visual Basic-be (VB 3.0-ra alapozva)
================================================
Harmadik rsz

Bevezets
-=-=-=-=-

Ht akkor harmadik alkalommal is dvzlk mindenkit. Ez a rsz a Message Box-okkal s a Common Dialog-okkal foglalkozik. A Message Box-okban mindenflt jelezhetsz/krdezhetsz a felhasznlnak/felhasznltl, a Common Dialog-ok pedig olyan hasznos, gyakran hasznlt ablakok, amikre biztos szksged lesz majd. Ha tl rvidnek tallom a harmadik rszt, akkor mg az Input Box-okrl is lesz sz.

Message Box
-=-=-=-=-=-

Mint azt mr fent emltettem, a Message Box egy ablak, amin mindefle zenet "jn ki". Meg nha krdsek. A legegyszerbb meghvsi mdja a kvetkez:

msgbox "Ez az n zenetem..."

Ezt mondjuk egy form_load-hoz, vagy egy commandbutton-hoz berakod, s akkor ltod is az eredmnyt.

Ha megfigyeled, akkor az ablakocska felirata a project neve lesz, ami nem (biztos hogy) megfelel. Ezrt rd t kicsit a fenti sort.

msgbox "Ez az n zenetem...",0,"zenet"

Most mr azt is tudod, hogy kell meghatrozni az ablak caption-jt. De mi az a 0? Nos, ezekkel lehet mg jobban testre szabni az msgbox-unkat. Prbld ki ezt:

valasz = msgbox ("Biztos ki akarsz lpni?",4,"Kilps")
if valasz = 6 then end
if valasz = 7 then msgbox "Akkor sok szerencst a tovbbiakban.",0,"zenet"

Ekkor nem az ok gomb fog megjelenni, hanem egy igen s egy nem gomb. Mi lenne, ha mg egy krdjelet is odacsalogatnnk? Semmi akadlya, csak a 4-est kell tjavtani 36-ra. Na, akkor sszefoglalva: az a szm arra val, hogy ms gombokat, esetleg brkat (krdjel, felkiltjel, stb) varzsolj az msgbox-ra. Ezt az rtket a kvetkezkppen kell meghatrozni:

Ok gomb = 0
Ok gomb, mgse gomb = 1
Kilps gomb, ismt gomb, tovbb gomb = 2
Igen gomb, nem gomb, mgse gomb = 3
Igen gomb, nem gomb = 4
Ismt gomb, mgse gomb = 5

Ekkor megvan az msgbox alapja. Ehhez az rtkhez kell hozzadni a kvetkez szmokat:

Piros X brhoz +16
Krdjelhez +32
Srga felkiltjelhez +48 
I bethz +64

Teht ha mondjuk egy olyan msgbox-ot akarsz, ami azt krdezi, hogy "A fjlt elmentem, j?", Ok s mgse gombokkal lehet vlaszolni, s egy felkiltjelet brzol, akkor:

Valasz = msgbox("A fjlt elmentem, j?",1+48,"Krds")

Mg hozz lehet az alaphoz adni nhny msik szmot is, ezek:

Ha azt akarod, hogy a msodik gomb legyen alapban kivlasztva +256
Ha azt akarod, hogy a harmadik gomb legyen alapban kivlasztva +512
Ha azt akarod, hogy sehova ne lehessen kattintani, amg nem vlaszolsz +4096

Az utolshoz egy kis megjegyzs: az msgbox alapban nem enged a PROGRAM BELL mshova kattintani, de ha hozzadod a 4096-os rtket, akkor SEHOVA SEM (teht pl. a Start menre sem).

Ha jobban megnzed a legutols msgbox-os sort, akkor szreveheted, hogy egy kicsit talakult. Fggvnny. Ez egyrszt onnan ismerhet fel, mert a Valasz vltoz rtket kap majd, msrszt mert zrjelek kztt vannak a paramterek. Ha eljrsknt hvod meg az msgbox-ot, akkor nem fontos zrjeleket hasznlni.

Akkor nzzk meg egy kicsit a Valasz vltozt! Ennek az rtke gy fog alakulni:

Ha OK gombot nyomtl: 1
Ha mgse gombot nyomtl: 2
Ha kilps gombot nyomtl: 3
Ha ismt gombot nyomtl: 4
Ha tovbb gombot nyomtl: 5
Ha igen gombot nyomtl: 6
Ha nem gombot nyomtl: 7

Ht, egy kicsit "szaggatottan-zaklatottan", de vglis megtudtad, hogyan kell Message Box-ot kszteni. Akkor egy kicsit sszefoglalom, mert nagyon elszrva vannak a hasznos infk...

Eljrs alak: msgbox "Ide jn az zeneted",Ertek,"Ide jn az msgbox caption-je"
Fggvny alak: Valasz = msgbox ("Ide jn a krdsed",Ertek,"Ide jn az msgbox caption-je")

ahol Ertek-et a fenti tblzatok alapjn kell meghatrozni, Valasz-t pedig a legutols tblzat alapjn.

Elg nehzkes dolog llandan ezt a tblzatot nzegetni, (egybknt benne van a VB helpjben is, ami jr a jogtiszta VB-hez, neked is az van, nem igaz? ;-) ) ezrt sszetttem egy kis programot, ami eleinte megknnyti a tervezgetst. Ksbb majd kvlrl fogjtok fjni a tblzatokat, legalbbis azokat az rtkeket, amelyeket leggyakrabban hasznltok.

Ebben a segdprogramocskban egybknt megtudhatod, hogy mire is j a frame: elklnti az Option Button-okat. gy egy kpernyn tbb Option Button-t is ki lehet vlasztani. 

Common Dialog
-=-=-=-=-=-=-

A Common Dialog-ok sszefoglalan gyakoran hasznlt ablakok. Ilyen pldul a megnyits, a ments msknt, a nyomtatsi belltsok, a sznkever, stb. Ezeket el lehet rni VBX (32 bitesben OCX) formjban, s egy msik mdon is, amirl most nem lesz sz. Ha rdekel az a bizonyos msik md, akkor tlts le a kvetkez fjlt: http://w3.swi.hu/vbzona/cmdnoocx.zip (csak 32 bites VB-khez). Na, de elszr is mik is azok a VBX-ek, OCX-ek? Ezek olyan fjlok, amelyeket ha hozzadsz a project-edhez, akkor jfajta elemeket (gombokat, nyilakat, stb) hasznlhatsz. Igen m, de ennek megvan az ra, ugyanis ha mshol futtatod a programot, s ott nincs ilyen VBX/OCX, akkor baj van. Ezrt nem annyira elegns VBX/OCX-eket hasznlni. De persze nem nyelik le az embert keresztbe, ha mgis hasznl, mert van, amikor szksge van r. A klnbsg a VBX-ek s az OCX-ek kztt (mr egyszer lertam, de hogy tiszta legyen a kp lerom mgegyszer) az, hogy a VBX-ek 16 bites VB-k al vannak, az OCX-ek pedig 32 bites VB-k al, s termszetesen nem lehet egy 32 bitessel VBX-et hasznlni, meg 16 bitessel OCX-t sem. De ezt megszokhattuk, a szoksos kompatibilitsi problmk.

Akkor trjnk vissza a Common Dialog-okra (ksbb: CMD). Kezdj egy j programot. Ha 3.0-d van, akkor az utols eltti sorban van, a bal oldali elem az. Tegyl egyet akrhov a form-on, gyse fog futs kzben ltszani. A Properties ablakon keresztl megnzheted, hogy valban azt tetted-e le. Ha vgkpp nem tallod, akkor lehet, hogy alapban nem adja hozz a programodhoz, ekkor a kvetkezt kell tenned: File menbl vlaszd ki az Add File pontot, s keresd meg CMDIALOG.VBX-et a Windows\System knyvtrban. Fejletteb VB-k alatt mr nagyobb az esly, hogy nem adja hozz alapban, 5.0 kezelfelletben gy lehet a legegyszerbben hozzadni: jobb gombbal kattints a Control Tool Box-ra, s vlaszd az "Component..." menpontot az elugr menbl. Ott tallsz majd egy listt, pipld ki a "Microsoft Common Dialog Control x.y", aztn Alkalmaz, majd Ok. Egybknt a CMDIALOG.BMP-ben megnzheted, hogy is nz ki az ikon.

3.0 alatt a neve CMDialog1 lesz, 5.0 krnykn meg CommonDialog1, ezt rdemes lervidteni "cmd"-re, mert sokszor kell majd berni. Tegyl egy gombot is valahov. A gomb kdja legyen a kvetkez:

cmd.action = 1
(5.0 s fejlettebb VB alatt ezt kivltja a cmd.showopen sor)

Indts el a programot. Ilyen egyszer ez, nem kell bajldni egy ilyen ablak megtervezsvel, hanem itt van mr, kszen tlalva... Akkor most sszefoglalom, hogy milyen tulajdonsgokat adhatsz mg meg:

cmd.dialogtitle = "Megnyitogats" 
Az ablak caption-jt tudod meghatrozni vele.

cmd.filter = "Szvegfjlok (*.txt)|*.txt|Kpek (*.bmp;*.ico)|*.bmp;*.ico|Minden fjl (*.*)|*.*"
Ez hatrozza meg, hogy milyen tpusokat mutasson abban az als combo box-ban. gy kell hasznlni: elszr a lerst megadod, utna egy 124-es ASCII kd "pipe" jellel. elvlasztva magt a kritriumot (pl. *.txt). Ha tbbet is meg akarsz adni, akkor azt pontosvesszvel kell elvlasztani, de ezt lthatod is a pldn.

cmd.filterindex = 2
Ez hatrozza meg, hogy alapban hnyadik tpus legyen kivlasztva. Ez az elbbi pldt felhasznlva a Kpek (*.bmp;*.ico)-t vlasztan ki.

cmd.initdir = "c:\vb"
Ezzel mondhatod meg a VB-nek, hogy melyik knyvtrat mutassa alapesetben.

Nos, ezek a legfontosabbak. A fentieket termszetesen mind a cmd.action = 1 sor ELTT kell megadni. s hogy utna ki tudjuk hmozni, hogy mit is vlasztott ki a felhasznl, arra a kvetkezk szolglnak:

nev$ = cmd.filename
A nev$-ba belekerl a kivlasztott fjl neve elrsi tvonallal.

nev$ = cmd.filetitle
A nev$-ba belekerl a kivlasztott fjl neve (elrsi tvonal NLKL!)

Naht akkor ezt is megismerted.

Felptsre nagyon hasonlt a ments msknt ablak (eddig ez volt ugye a megnyits). Ugyangy kell hasznlni, mint a megnyitst, csak a meghvsban klnbzik:

cmd.action = 2
(vagy cmd.showsave 5.0+ alatt)

Az utols funkci, (amivel foglalkozunk) az a szn kivlaszt lesz. Meghvsa:

cmd.action = 3
(vagy cmd.showcolor 5.0+ alatt)

Eltte nem kell lltgatni semmit, a kivlaszott sznt megkaphatod a kvetkez sorral:

szin = cmd.color

Akkor ennyit nagyjbl a CMD-krl. Vgezetl itt van a megnyits s a ments msknt, ahogy n szoktam hasznlni. Hibaellenrzssel. Ha nem rted, nem baj, de szerintem nem olyan bonyolult.

Megnyits
-=-=-=-=-

cmd.filetitle = "XXX fjlok (*.XXX)|*.XXX|sszes fjl (*.*)|*.*"
on error resume next
' Ha I/O hibt szlel, akkor ne lljon le, hanem menjen tovbb
cmd.action = 1
if cmd.filename = "" then exit sub
' Ha a mgse gombot nyomta meg a felhasznl, akkor res stringgel tr vissza a filename
If Err <> 0 Then
  msgbox "Hiba trtnt a megnyits sorn!",48,"Megnyits"
  exit sub
End If
' Az Err vltozo valamilyen rtket vesz fel, ha I/O hiba trtnt.
...
... (megnyitsi folyamat, a fjlkezelsrl a kvetkez rszben lesz sz)
...

Ments msknt
-=-=-=-=-=-=-=

cmd.filetitle = "XXX fjlok (*.XXX)|*.XXX|sszes fjl (*.*)|*.*"
on error resume next
' Ha I/O hibt szlel, akkor ne lljon le, hanem menjen tovbb
cmd.action = 2
if cmd.filename = "" then exit sub
' Ha a mgse gombot nyomta meg a felhasznl, akkor res stringgel tr vissza a filename,
' ebben az esetben nem kell tovbbmenni.
...
... (mentsi folyamat, a fjlkezelsrl a kvetkez rszben lesz sz)
...
If Err <> 0 Then
  msgbox "Hiba trtnt a ments kzben!",48,"Ments msknt"
  exit sub
End If
' Az Err vltozo valamilyen rtket vesz fel, ha I/O hiba trtnt.

Inputbox
-=-=-=-=

Ht, gy ltom, ebbe a rszbe mg bven belefr az Inputbox. De ez sem lesz hossz. Inputbox-ot nem biztos hogy lttl, mert nem hasznljk olyan gyakran, de azrt rdemes megismerni, mert gy nha ki lehet kerlni j ablakok/elemek hasznlatt (feltve ha csak egy egyszer, egy sorban megvlaszolhat krdsrl van sz).

Hasznlata:

X$ = InputBox("Ezt fogja krdezni az inputbox","Ez lesz a caption-je az inputboxnak")

Ezutn az X$ vltoz fogja tartalmazni az inputbox-ba bertakat. Ha a mgsem gombot nyomta meg a felhasznl, akkor res lesz.

Megjegyzem, hogy rdemes mindig string-knt (a $ jel ezt jelli, mg errl se volt sz, de majd a kvetkezben...) bekrni az adatokat, mg ha szmadatrl is van sz, mivel utna t lehet konvertlni, s ott kiderl, hogy esetleg nem szmot rtak be. Na, ezt megmutatom pldban:

Elso$ = InputBox("rj be egy szmot!","Els szm")
Masodik$ = InputBox("rj be mg egy szmot!","Msodik szm")
ElsoSzam = Val(Elso$) ' Szmm konvertljuk ket a Val fggvnnyel
MasodikSzam = Val(Masodik$)
Uzenet$ = "A kt szm sszege: "+CStr(ElsoSzam+MasodikSzam) ' A CStr fggvny string-g konvertl
msgbox Uzenet$,0,"sszeads"

Egybknt csak az els paramter megadsa ktelez, a tbbi nem. Ugyanis nem csak kett lehet. Na, akkor lerom hivatalosan a hasznlatt:

X = InputBox("Krds","Inputbox caption","Alap vlasz",100,100)

A harmadik azt adja meg, hogy mi legyen alapban berva, az utols kt szm pedig az X,Y koordintkat adja meg (hogy hol legyen az ablak). Ha nem adod meg a koordintkat, kzpen lesz.

Itt a vge
-=-=-=-=-=

Megint elrkeztnk a mostani rsz vgre. Rjttem, hogy elg sokminden hinyzik mg, ezrt a kvetkez rsz (aminek vglis taln a msodiknak kellett volna lennie) egy kicsit ltalnosabban fog szlni a vltozkrl, konvertlsukrl, fjlmveletekrl s ilyesmikrl. Augusztusra szerintem mr ksz lesz az is...


Ezt azt iromnyt Kvi Blint ksztette. Fellem azt csinlsz vele, amit akarsz, trhatod, de azrt emlts meg engem is, j? Frisstseket, folytatsokat mindig tallhatsz a Visual Basic znban: http://vbzona.fw.hu/